frontend/pages/e/[uuid]/alerts.tsx (view raw)
1import {PropsWithChildren} from 'react';
2import Alerts from '../../../containers/Alerts';
3import EventLayout, {TabComponent} from '../../../layouts/Event';
4import {
5 EventByUuidDocument,
6 EventEntity,
7 TripAlertDocument,
8 TripAlertEntity,
9} from '../../../generated/graphql';
10import pageUtils from '../../../lib/pageUtils';
11import {getLocaleForLang} from '../../../lib/getLocale';
12
13interface Props {
14 eventUUID: string;
15 announcement?: string;
16 event: EventEntity;
17 tripAlertEntity: TripAlertEntity;
18}
19
20const Page = (props: PropsWithChildren<Props>) => {
21 return (
22 <EventLayout
23 {...props}
24 Tab={AlertsTab}
25 tabProps={{tripAlertEntity: props.tripAlertEntity}}
26 />
27 );
28};
29
30const AlertsTab: TabComponent<Props> = ({
31 event,
32 tripAlertEntity,
33}: {
34 event: EventEntity;
35 tripAlertEntity: TripAlertEntity;
36}) => {
37 return <Alerts event={event} tripAlertEntity={tripAlertEntity} />;
38};
39
40export const getServerSideProps = pageUtils.getServerSideProps(
41 async (context, apolloClient) => {
42 const {uuid} = context.query;
43 const {host = ''} = context.req.headers;
44 let event = null;
45 let tripAlertEntity = null;
46
47 try {
48 const {data} = await apolloClient.query({
49 query: EventByUuidDocument,
50 variables: {uuid},
51 });
52 event = data?.eventByUUID?.data;
53 } catch (error) {
54 return {
55 notFound: true,
56 };
57 }
58
59 const isCarosterPlus =
60 event?.attributes?.enabled_modules?.includes('caroster-plus');
61 if (!isCarosterPlus)
62 return {
63 notFound: true,
64 };
65
66 try {
67 const {data} = await apolloClient.query({
68 query: TripAlertDocument,
69 variables: {eventId: event.id},
70 });
71 tripAlertEntity = data.eventTripAlert.data;
72 } catch (error) {
73 tripAlertEntity = null;
74 }
75
76 const description = await getLocaleForLang(
77 event?.attributes?.lang,
78 'meta.description'
79 );
80
81 return {
82 props: {
83 eventUUID: uuid,
84 tripAlertEntity,
85 metas: {
86 title: event?.attributes?.name || '',
87 description,
88 url: `https://${host}${context.resolvedUrl}`,
89 },
90 },
91 };
92 }
93);
94
95export default Page;